約 2,105,378 件
https://w.atwiki.jp/ce00582/pages/5408.html
class ex33{ int byear,cho,car,stage,age; double z1,z2,z3,z4,z5,z6,z7; double v; double mtime2[]=new double[200]; double mis[][]=new double[100][51]; double mos[][]=new double[100][51]; double m2by[][]=new double[200][100]; double alpha[]=new double[100]; double beta[]=new double[100]; double gamma[]=new double[100]; double theta[]=new double[100]; double minx[][]=new double[100][100]; double mout[][]=new double[100][100]; void makedata(String file){ ex19 sub19=new ex19(); sub19.makedata(); minx=sub19.mint; ex21 sub21=new ex21(); sub21.makedata(); mout=sub21.mint; ex16 sub16=new ex16(); sub16.makedata(file); m2by=sub16.m2by; data151 d151=new data151(); d151.makedata(); alpha=d151.alpha; beta=d151.beta; gamma=d151.gamma; data152 d152=new data152(); d152.makedata(); theta=d152.mtheta; cho=1900; for(byear=1950; byear 1990; byear++){ cho=1900; for(age=15;age 65;age++){ for(car=0;car 50;car++){ mis[age][car]=0; mos[age][car]=0; } } stage =2008-byear; for(car=1;car 50;car++){ mis[stage][car] = minx[stage][car]; mos[stage][car] = mout[stage][car]; } for(age=stage+1;age 65;age++){ z1= (1 - gamma[age - 1])* m2by[byear-cho][age-1]; z2=m2by[byear-cho][age] - z1; if(z2 0)z2 = 0; z3 =(1 - theta[age]) * z2; z4 = theta[age] * z2; mis[age][1] = z3; z5 = 0; for(car=1;car 50;car++){ z5 = z5 + mos[age-1][car]; } if(z5 == 0)z5 = 1; v=(double)z4/z5; if(v 1)v = 1; for(car=2;car 50;car++){ z6 =(1 - gamma[age - 1]) *mis[age-1][car-1]; mis[age][car]=z6+v * mos[age-1][car-1]; } for(car=1;car 50;car++){ z7=(gamma[age - 1] - alpha[age - 1] - beta[age-1]) * mis[age-1][car]; mos[age][car] = z7+(1 - alpha[age - 1] - v) * mos[age-1][car]; } } z1=0; z2=0; for(car=25;car 50;car++){ z1 = z1 + mis[64][car] + mos[64][car]; z2 = z2 +car*(mis[64][car] + mos[64][car]); } mtime2[byear-cho] =z2/z1; } } }
https://w.atwiki.jp/ce00582/pages/2959.html
import java.awt.*; import java.awt.geom.*; import java.awt.event.*; import javax.swing.*; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import java.io.IOException; import java.io.*; public class pro extends JFrame{ double c[][]=new double[6][6]; double y1[][]=new double[6][6]; double y2[][]=new double[6][6]; int s1,s2; public static void main(String[] args){ pro test = new pro(); test.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){System.exit(0);} }); test.setBounds( 0, 0, 700, 700); test.setVisible(true); } pro(){ try{ BufferedReader br = new BufferedReader(new FileReader("tax.txt")); String str; String x[]=new String[5]; for(int i=0; i 25; i++){ str = br.readLine(); x=str.split(","); s1=Integer.valueOf(x[0]); s2=Integer.valueOf(x[1]); c[s1][s2]=Double.valueOf(x[2]); y1[s1][s2]=Double.valueOf(x[3]); y2[s1][s2]=Double.valueOf(x[4]); } br.close(); } catch(IOException e){System.out.println("入出力エラーです。");} } public void paint(Graphics g){ double x,y,z; int px,py; int px1,px2,py1,py2; Graphics2D g2 = (Graphics2D)g; BufferedImage readImage = null; if (readImage == null){ readImage = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_BGR); } Graphics2D off = readImage.createGraphics(); off.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); BasicStroke wideStroke = new BasicStroke(2.0f); off.setStroke(wideStroke); off.setPaint(Color.red); x=0; y=0; z=500; px=pointx(x,y,z); py=pointy(x,y,z); off.drawLine(100,600,100+px,600-py); x=500; y=0; z=0; px=pointx(x,y,z); py=pointy(x,y,z); off.drawLine(100,600,100+px,600-py); x=0; y=500; z=0; px=pointx(x,y,z); py=pointy(x,y,z); off.drawLine(100,600,100+px,600-py); off.setColor(Color.blue); for (s2=1;s2 6;s2++){ for (s1=1;s1 5;s1++){ x=1000*y1[s1][s2]; y=1000*y2[s1][s2]; z=1000*c[s1][s2]; px1=pointx(x,y,z); py1=pointy(x,y,z); x=1000*y1[s1+1][s2]; y=1000*y2[s1+1][s2]; z=1000*c[s1+1][s2]; px2=pointx(x,y,z); py2=pointy(x,y,z); off.drawLine(100+px1,600-py1,100+px2,600-py2); } } for (s1=1;s1 6;s1++){ for (s2=1;s2 5;s2++){ x=1000*y1[s1][s2]; y=1000*y2[s1][s2]; z=1000*c[s1][s2]; px1=pointx(x,y,z); py1=pointy(x,y,z); x=1000*y1[s1][s2+1]; y=1000*y2[s1][s2+1]; z=1000*c[s1][s2+1]; px2=pointx(x,y,z); py2=pointy(x,y,z); off.drawLine(100+px1,600-py1,100+px2,600-py2); } } off.drawString("夫婦の消費",100,100); off.drawString("妻の所得",600,400); if (readImage != null){g2.drawImage(readImage,0,0, this);} try { boolean result = ImageIO.write(readImage, "jpg", new File("sam.jpg")); } catch (Exception e) { e.printStackTrace(); } } public static int pointy(double x,double y,double z){ int p2; double theta,phi; theta=-0.222222*Math.PI; phi=0.333333*Math.PI; p2=(int)(-Math.cos(theta)*Math.cos(phi)*x-Math.sin(theta)*Math.cos(phi)*y+Math.sin(phi)*z); return p2; } public static int pointx(double x,double y,double z){ int p1; double theta; theta=-0.222222*Math.PI; p1=(int)(-Math.sin(theta)*x+Math.cos(theta)*y); return p1; } }
https://w.atwiki.jp/c21coterie/pages/645.html
2233 Carrot Tour http //judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2233 兎が都市を回って人参をもらってくる問題。 解法 兎が前にいた都市今いる都市の組を点に見立ててグラフとして解きます。 人参の個数を一つずつインクリメントしながら人参n個で前にいた都市a今いる都市bとして動的計画法で計算していけば答えが出ます。 もっと速度が出るかと思ったら意外と速度が出ませんでした。 #include stdio.h #include vector #include queue #include map #include math.h #include iostream struct rMove{ int oldCity,nowCity; long double len; }; int main(){ long double xs[21],ys[21]; int n; long double r,theta; scanf("%d", n); if(n==1){ printf("0\n"); return 0; } std cin r theta; theta=cos(theta/180.0*M_PI); for(int i=0;i n;i++){ std cin xs[i] ys[i]; } std vector int moveOKs[21][21];//moveOKs[前いた都市][今いる都市]="次にいける都市のリスト" long double dx1,dx2,dy1,dy2; for(int i=0;i n;i++){ //前の都市 for(int j=0;j n;j++){ //今いる都市 if(i==j)continue; for(int k=0;k n;k++){ //次の都市 if(i==k||j==k)continue; dx1=xs[j]-xs[i]; dy1=ys[j]-ys[i]; dx2=xs[k]-xs[j]; dy2=ys[k]-ys[j]; double cos1=(dx1*dx2+dy1*dy2)/(hypot(dx1,dy1)*hypot(dx2,dy2)); if(cos1 =theta hypot(dx2,dy2) =r){ moveOKs[i][j].push_back(k); } } } } std queue rMove qu; rMove rm; rm.oldCity=0; for(int i=1;i n;i++){ rm.len=hypot(xs[i]-xs[0],ys[i]-ys[0]); rm.nowCity=i; if(rm.len =r){ qu.push(rm); } } int ans=0; std map int,double getMemo[21];//[前にいた都市][今いる都市]=最短移動距離 while(qu.empty()==false){ double len; ans++; while(qu.empty()==false){ rm=qu.front(); qu.pop(); if(rm.len r)continue; for(int i=0;i moveOKs[rm.oldCity][rm.nowCity].size();i++){ int no=moveOKs[rm.oldCity][rm.nowCity][i]; double len=rm.len+hypot(xs[rm.nowCity]-xs[no],ys[rm.nowCity]-ys[no]); if(len r)continue; if(getMemo[rm.nowCity].find(no)==getMemo[rm.nowCity].end()||getMemo[rm.nowCity][no] len){ getMemo[rm.nowCity][no]=len; } } } for(int i=0;i n;i++){ for(int j=0;j n;j++){ if(getMemo[i].find(j)!=getMemo[i].end()){ rm.oldCity=i; rm.nowCity=j; rm.len=getMemo[i][j]; qu.push(rm); } } } for(int i=0;i n;i++)getMemo[i].clear(); } printf("%d\n",ans); }
https://w.atwiki.jp/ce00582/pages/2957.html
import java.awt.*; import java.awt.geom.*; import java.awt.event.*; import javax.swing.*; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import java.io.IOException; import java.io.*; public class pro extends JFrame{ double c[][]=new double[6][6]; double y1[][]=new double[6][6]; double y2[][]=new double[6][6]; int s1,s2; public static void main(String[] args){ pro test = new pro(); test.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){System.exit(0);} }); test.setBounds( 0, 0, 700, 700); test.setVisible(true); } pro(){ try{ BufferedReader br = new BufferedReader(new FileReader("tax.txt")); String str; String x[]=new String[5]; for(int i=0; i 25; i++){ str = br.readLine(); x=str.split(","); s1=Integer.valueOf(x[0]); s2=Integer.valueOf(x[1]); c[s1][s2]=Double.valueOf(x[2]); y1[s1][s2]=Double.valueOf(x[3]); y2[s1][s2]=Double.valueOf(x[4]); } br.close(); } catch(IOException e){System.out.println("入出力エラーです。");} } public void paint(Graphics g){ double x,y,z; int px,py; int px1,px2,py1,py2; Graphics2D g2 = (Graphics2D)g; BufferedImage readImage = null; if (readImage == null){ readImage = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_BGR); } Graphics2D off = readImage.createGraphics(); off.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); BasicStroke wideStroke = new BasicStroke(2.0f); off.setStroke(wideStroke); off.setPaint(Color.red); x=0; y=0; z=500; px=pointx(x,y,z); py=pointy(x,y,z); off.drawLine(100,600,100+px,600-py); x=500; y=0; z=0; px=pointx(x,y,z); py=pointy(x,y,z); off.drawLine(100,600,100+px,600-py); x=0; y=500; z=0; px=pointx(x,y,z); py=pointy(x,y,z); off.drawLine(100,600,100+px,600-py); off.setColor(Color.blue); for (s2=1;s2 6;s2++){ for (s1=1;s1 5;s1++){ x=1000*y1[s1][s2]; y=1000*y2[s1][s2]; z=1000*c[s1][s2]; px1=pointx(x,y,z); py1=pointy(x,y,z); x=1000*y1[s1+1][s2]; y=1000*y2[s1+1][s2]; z=1000*c[s1+1][s2]; px2=pointx(x,y,z); py2=pointy(x,y,z); off.drawLine(100+px1,600-py1,100+px2,600-py2); } } for (s1=1;s1 6;s1++){ for (s2=1;s2 5;s2++){ x=1000*y1[s1][s2]; y=1000*y2[s1][s2]; z=1000*c[s1][s2]; px1=pointx(x,y,z); py1=pointy(x,y,z); x=1000*y1[s1][s2+1]; y=1000*y2[s1][s2+1]; z=1000*c[s1][s2+1]; px2=pointx(x,y,z); py2=pointy(x,y,z); off.drawLine(100+px1,600-py1,100+px2,600-py2); } } if (readImage != null){g2.drawImage(readImage,0,0, this);} try { boolean result = ImageIO.write(readImage, "jpg", new File("sam.jpg")); } catch (Exception e) { e.printStackTrace(); } } public static int pointy(double x,double y,double z){ int p2; double theta,phi; theta=-0.222222*Math.PI; phi=0.333333*Math.PI; p2=(int)(-Math.cos(theta)*Math.cos(phi)*x-Math.sin(theta)*Math.cos(phi)*y+Math.sin(phi)*z); return p2; } public static int pointx(double x,double y,double z){ int p1; double theta; theta=-0.222222*Math.PI; p1=(int)(-Math.sin(theta)*x+Math.cos(theta)*y); return p1; } }
https://w.atwiki.jp/ce00582/pages/3634.html
import java.awt.*; import java.awt.event.*; class game0501 extends Frame implements Runnable{ double x,y,z; double rx,ry; double x1,x2,x3,y1,y2,y3; public static void main(String [] args) { Frame f=new game0501(); f.setTitle("game0501"); f.setSize(700,700); f.setBackground(Color.blue); f.setVisible(true); } game0501(){ x=500; y=0; z=0; rot(x,y,z); x1=rx; y1=ry; x=0; y=500; z=0; rot(x,y,z); x2=rx; y2=ry; x=0; y=0; z=500; rot(x,y,z); x3=rx; y3=ry; Thread th=new Thread(this); th.start(); addWindowListener(new stopwin()); } class stopwin extends WindowAdapter{ public void windowClosing(WindowEvent we){System.exit(0);} } public void run(){ int t; t=1; while(t 100){ repaint(); try{ Thread.sleep(1000); }catch(InterruptedException e){} t=t+1; } repaint(); } public void paint(Graphics g){ int gx,gy; gx=seekgx(x1); gy=seekgy(y1); g.drawLine(100,400,gx,gy); gx=seekgx(x2); gy=seekgy(y2); g.drawLine(100,400,gx,gy); gx=seekgx(x3); gy=seekgy(y3); g.drawLine(100,400,gx,gy); } public int seekgx(double x){ return (int)(100+x); } public int seekgy(double y){ return (int)(400-y); } public void rot(double x,double y,double z){ double theta,phi; double a1,a2,a3,a4; theta = -40*Math.PI/180; phi=60*Math.PI/180; a1=Math.cos(theta); a2=Math.sin(theta); a3=Math.cos(phi); a4=Math.sin(phi); rx=-a2*x+a1*y; ry=-a1*a4*x-a2*a3*y+a4*z; } }
https://w.atwiki.jp/ce00582/pages/3610.html
import java.awt.*; import java.awt.event.*; class game0420 extends Frame implements Runnable{ double x,y,z; double rx,ry; double x1,x2,x3,y1,y2,y3; public static void main(String [] args) { Frame f=new game0420(); f.setTitle("game0420"); f.setSize(700,700); f.setBackground(Color.blue); f.setVisible(true); } game0420(){ x=500; y=0; z=0; rot(x,y,z); x1=rx; y1=ry; x=0; y=500; z=0; rot(x,y,z); x2=rx; y2=ry; x=0; y=0; z=500; rot(x,y,z); x3=rx; y3=ry; Thread th=new Thread(this); th.start(); addWindowListener(new stopwin()); } class stopwin extends WindowAdapter{ public void windowClosing(WindowEvent we){System.exit(0);} } public void run(){ int t; t=1; while(t 100){ repaint(); try{ Thread.sleep(1000); }catch(InterruptedException e){} t=t+1; } repaint(); } public void paint(Graphics g){ int gx,gy; gx=seekgx(x1); gy=seekgy(y1); g.drawLine(100,400,gx,gy); gx=seekgx(x2); gy=seekgy(y2); g.drawLine(100,400,gx,gy); gx=seekgx(x3); gy=seekgy(y3); g.drawLine(100,400,gx,gy); } public int seekgx(double x){ return (int)(100+x); } public int seekgy(double y){ return (int)(400-y); } public void rot(double x,double y,double z){ double theta,phi; double a1,a2,a3,a4; theta = -40*Math.PI/180; phi=60*Math.PI/180; a1=Math.cos(theta); a2=Math.sin(theta); a3=Math.cos(phi); a4=Math.sin(phi); rx=-a2*x+a1*y; ry=-a1*a4*x-a2*a3*y+a4*z; } }
https://w.atwiki.jp/opengl/pages/300.html
シャドウマッピングです。 一時的に視点を光源に移してみると光の当たる部分を見る事ができます。 その時の見えない部分=障害物=デプスバッファの値が影となります。 オブジェクトが別のオブジェクトに落とす影は、もちろんの事、 オブジェクト自身が自らに落とす影も描画する事ができます。 vertex.shader varying vec3 P; varying vec3 N; void main(void) { P = vec3(gl_ModelViewMatrix * gl_Vertex); N = normalize(gl_NormalMatrix * gl_Normal); gl_TexCoord[0] = gl_TextureMatrix[0] * gl_Vertex; gl_Position = ftransform(); } flagment.shader varying vec3 P; varying vec3 N; uniform sampler2DShadow shadowMap; void main(void) { vec3 L = normalize(gl_LightSource[0].position.xyz - P); N = normalize(N); vec4 ambient = gl_FrontLightProduct[0].ambient; float dotNL = dot(N, L); vec4 diffuse = gl_FrontLightProduct[0].diffuse * max(0.0, dotNL); vec3 V = normalize(-P); vec3 H = normalize(L + V); float powNH = pow(max(dot(N, H), 0.0), gl_FrontMaterial.shininess); if(dotNL = 0.0) powNH = 0.0; vec4 specular = gl_FrontLightProduct[0].specular * powNH; float shadow = 0.3;//影濃度 float s = shadow2DProj(shadowMap, gl_TexCoord[0]).r; diffuse *= clamp(s, shadow, 1.0); gl_FragColor = ambient + diffuse + specular * s; } GLSL.h #pragma once #include stdio.h //GLSLクラス class GLSL{ public GLuint ShaderProg; GLuint VertexShader, FragmentShader; void ReadShaderCompile(GLuint Shader, const char *File);//shader fileを読み込みコンパイルする void Link( GLuint Prog );//リンクする void InitGLSL(const char *VertexFile);//GLSLの初期化 void InitGLSL(const char *VertexFile, const char *FragmentFile);//GLSLの初期化 void ON();//シェーダー描画に切り替え void OFF();//シェーダー解除 ~GLSL(); }; void GLSL ReadShaderCompile(GLuint Shader, const char *File){ FILE *fp; char *buf; GLsizei size, len; GLint compiled; fopen_s( fp,File, rb ); if(!fp) printf( ファイルを開くことができません %s\n , File); fseek(fp, 0, SEEK_END); size = ftell(fp); buf = (GLchar *)malloc(size); if (buf == NULL) { printf( メモリが確保できませんでした \n ); } fseek(fp, 0, SEEK_SET); fread(buf, 1, size, fp); glShaderSource(Shader, 1, (const GLchar **) buf, size); free(buf); fclose(fp); glCompileShader(Shader); glGetShaderiv( Shader, GL_COMPILE_STATUS, compiled ); if ( compiled == GL_FALSE ) { printf( コンパイルできませんでした!! %s \n , File); glGetProgramiv( Shader, GL_INFO_LOG_LENGTH, size ); if ( size 0 ) { buf = (char *)malloc(size); glGetShaderInfoLog( Shader, size, len, buf); printf(buf); free(buf); } } } void GLSL Link( GLuint Prog ){ GLsizei size, len; GLint linked; char *infoLog ; glLinkProgram( Prog ); glGetProgramiv( Prog, GL_LINK_STATUS, linked ); if ( linked == GL_FALSE ){ printf( リンクできませんでした!! \n ); glGetProgramiv( Prog, GL_INFO_LOG_LENGTH, size ); if ( size 0 ){ infoLog = (char *)malloc(size); glGetProgramInfoLog( Prog, size, len, infoLog ); printf(infoLog); free(infoLog); } } } void GLSL InitGLSL(const char *VertexFile){ GLenum err = glewInit(); if (err != GLEW_OK) { printf( Error %s\n , glewGetErrorString(err)); } printf( VENDOR= %s \n , glGetString(GL_VENDOR)); printf( GPU= %s \n , glGetString(GL_RENDERER)); printf( OpenGL= %s \n , glGetString(GL_VERSION)); printf( GLSL= %s \n , glGetString(GL_SHADING_LANGUAGE_VERSION)); VertexShader = glCreateShader(GL_VERTEX_SHADER); ReadShaderCompile(VertexShader, VertexFile); ShaderProg = glCreateProgram(); glAttachShader(ShaderProg, VertexShader); glDeleteShader(VertexShader); Link(ShaderProg); } void GLSL InitGLSL(const char *VertexFile, const char *FragmentFile){ GLenum err = glewInit(); if (err != GLEW_OK) { printf( Error %s\n , glewGetErrorString(err)); } printf( VENDOR= %s \n , glGetString(GL_VENDOR)); printf( GPU= %s \n , glGetString(GL_RENDERER)); printf( OpenGL= %s \n , glGetString(GL_VERSION)); printf( GLSL= %s \n , glGetString(GL_SHADING_LANGUAGE_VERSION)); VertexShader = glCreateShader(GL_VERTEX_SHADER); FragmentShader = glCreateShader(GL_FRAGMENT_SHADER); ReadShaderCompile(VertexShader, VertexFile); ReadShaderCompile(FragmentShader, FragmentFile); ShaderProg = glCreateProgram(); glAttachShader(ShaderProg, VertexShader); glAttachShader(ShaderProg, FragmentShader); glDeleteShader(VertexShader); glDeleteShader(FragmentShader); Link(ShaderProg); } void GLSL ON(){ glUseProgram(ShaderProg); } void GLSL OFF(){ glUseProgram(0); } GLSL ~GLSL(){ glDeleteProgram(ShaderProg); } main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, glew32.lib ) #include stdio.h #include windows.h #include GL/glew.h #include GLSL.h #include math.h #include GL/freeglut/freeglut.h #define PAI 3.141592f float pos[][3] = { //位置(平行移動) { 0.3f, 3.5f, 0.0f},//obj0 {-0.4f, 1.5f, 0.0f} //obj1 }; float angle[][3] = {//姿勢(回転) { 0.0f, 0.0f, 0.0f}, //obj0 { 0.0f, 0.0f, 0.0f} //obj1 }; float lightPos[] = {0.0f, 6.0f, 1.0f, 1.0f};//光源位置 //カメラと視体積 struct View{ float pos[3];//位置(視点) float cnt[3];//注視点 float dist; //注視点から視点までの距離 float theta; //仰角(水平面との偏角) float phi; //方位角 //視体積 float fovY; //視野角 float nearZ; //前方クリップ面(近平面) float farZ; //後方クリップ面(遠平面) }; View view = { 0.0f, 0.0f, 0.0f,//pos(仮設定) 0.0f, 1.0f, 0.0f,//cnt 10.0f, 30.0f, 0.0f,//dist, theta, phi 40.0f, 1.0f, 100.0f//fovY,nearZ, farZ }; View view0 = view; GLSL glsl; //Windowのサイズ int width = 512; int height = 512; //アフィン変換 enum SELECT_KEY {ROTATE, SCALE, TRANSLATE, LIGHT}; SELECT_KEY sKey = TRANSLATE; //マウス操作 int xStart, yStart; bool flagMouse = false; //オブジェクト識別番号 int objNo = 0; //回転アニメーション float ang = 0.0f; //シャドウマッピング用テクスチャー int TEX_WIDTH = width; int TEX_HEIGHT = height; float fov = 120.0;//シャドウマッピングの視野角 float farZ = 50.0;//シャドウマッピングの後方クリップ面 GLfloat modelview[16]; //モデルビュー変換行列の保存用 void drawCylinder(float rBottom, float rTop, float height, float thick, int nSlice, int nStack){ int i, j; float x, y, z, z0, z1; float theta; float theta0 = (float)2.0*PAI/nSlice; //上底(Top) glBegin(GL_QUAD_STRIP); glNormal3f(0.0f, 0.0f, 1.0f); for(i = 0; i = nSlice; i++) { theta = theta0 * (float)i; z = height/2.0f; //内側座標 x = (rTop - thick) * cos(theta); //x成分 y = (rTop - thick) * sin(theta); //y成分 glVertex3f(x, y, z); //外側座標 x = rTop * cos(theta); //x成分 y = rTop * sin(theta); //y成分 glVertex3f(x, y, z); } glEnd(); //下底(Bottom) glBegin(GL_QUAD_STRIP); glNormal3f(0.0f, 0.0f, -1.0f); for(i = 0; i = nSlice; i++) { theta = theta0 * (float)i; z = -height/2.0f; //外側座標 x = rBottom * cos(theta); //x成分 y = rBottom * sin(theta); //y成分 glVertex3f(x, y, z); //内側座標 x = (rBottom - thick) * cos(theta); //x成分 y = (rBottom - thick) * sin(theta); //y成分 glVertex3f(x, y, z); } glEnd(); float t0, t1, r0, r1, phi; float p[2][3], n[3]; float rr = rBottom - rTop; float nz = rr / sqrt(rr*rr + height*height); float nxy = sqrt(1.0f - nz * nz); for(j = 0; j nStack; j++){ //j=0は上底(x=0, y=0, z=height/2) //2つのt座標 t0 = (float)j / (float)nStack; t1 = (float)(j+1) / (float)nStack; //底面からの高さ z0 = height * (1.0f - t0); z1 = height * (1.0f - t1); //半径 r0 = rBottom + (rTop - rBottom) * z0 / height; r1 = rBottom + (rTop - rBottom) * z1 / height; //頂点z座標 p[0][2] = z0 - height / 2.0f; p[1][2] = z1 - height / 2.0f; glBegin(GL_QUAD_STRIP); for(i = 0; i = nSlice; i++){ phi = 2.0f * PAI * (float)i / (float)nSlice; //頂点のxy座標(i=0を真後ろ) p[0][0] = r0 * cos(phi);//x座標 p[0][1] = r0 * sin(phi);//y座標 p[1][0] = r1 * cos(phi);//x座標 p[1][1] = r1 * sin(phi);//y座標 //法線ベクトル n[0] = nxy * cos(phi); n[1] = nxy * sin(phi); n[2] = nz; glNormal3fv(n);//法線ベクトル glVertex3fv(p[0]);//頂点座標 glVertex3fv(p[1]);//頂点座標 } glEnd(); } //内側側面 for(j = 0; j nStack; j++){ //j=0は上底(x=0, y=0, z=height/2) //2つのt座標 t0 = (float)j / (float)nStack; t1 = (float)(j+1) / (float)nStack; //底面からの高さ z0 = (float)height * (1.0f - t0); z1 = (float)height * (1.0f - t1); //半径 r0 = rBottom - thick + (rTop - rBottom) * z0 / height; r1 = rBottom - thick + (rTop - rBottom) * z1 / height; //頂点z座標 p[0][2] = z0 - height / 2.0f; p[1][2] = z1 - height / 2.0f; glBegin(GL_QUAD_STRIP); for(i = nSlice; i = 0; i--){ phi = 2.0f * PAI * (float)i / (float)nSlice; //頂点のxy座標(i=0を真後ろ) p[0][0] = -r0 * cos(phi);//x座標 p[0][1] = -r0 * sin(phi);//y座標 p[1][0] = -r1 * cos(phi);//x座標 p[1][1] = -r1 * sin(phi);//y座標 //法線ベクトル n[0] = nxy * cos(phi); n[1] = nxy * sin(phi); n[2] = - nz; glNormal3fv(n);//法線ベクトル glVertex3fv(p[0]);//頂点座標 glVertex3fv(p[1]);//頂点座標 } glEnd(); } } void setShadowMap(){ //テクスチャを拡大・縮小する方法の指定 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //テクスチャの繰り返し方法の指定 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); //テクスチャ座標rを用いてテクセル値と比較 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE); //rの値がテクセル値以上なら影になる glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); //結果を輝度値として取得 glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE); } void setTextureMatrix(){ glMatrixMode(GL_TEXTURE); glLoadIdentity(); glTranslatef(0.5, 0.5, 0.5); glScalef(0.5, 0.5, 0.5); glMultMatrixf(modelview); } void drawTorus(void){ setTextureMatrix(); glTranslatef(pos[0][0], pos[0][1], pos[0][2]); glRotatef(angle[0][2], 0.0f, 0.0f, 1.0f);//z軸回転 glRotatef(angle[0][1], 0.0f, 1.0f, 0.0f);//y軸回転 glRotatef(angle[0][0] + ang, 1.0f, 0.0f, 0.0f);//x軸回転 float ambient[] = { 0.0f, 0.0f, 0.7f, 1.0f}; float diffuse[] = { 0.0f, 0.0f, 0.7f, 1.0f}; float specular[]= { 0.5f, 0.5f, 0.5f, 1.0f}; glMaterialfv(GL_FRONT,GL_AMBIENT,ambient); glMaterialfv(GL_FRONT,GL_DIFFUSE,diffuse); glMaterialfv(GL_FRONT,GL_SPECULAR,specular); glMaterialf(GL_FRONT,GL_SHININESS,100); //モデルビュー変換行列に戻す glMatrixMode(GL_MODELVIEW); glPushMatrix(); glTranslatef(pos[0][0], pos[0][1], pos[0][2]); glRotatef(angle[0][2], 0.0f, 0.0f, 1.0f);//z軸回転 glRotatef(angle[0][1], 0.0f, 1.0f, 0.0f);//y軸回転 glRotatef(angle[0][0] + ang, 1.0f, 0.0f, 0.0f);//x軸回転 glutSolidTorus(0.2f, 0.5f, 20, 20); glPopMatrix(); } void drawCylinder(void){ setTextureMatrix(); glTranslatef(pos[1][0], pos[1][1], pos[1][2]); glRotatef(angle[1][2], 0.0f, 0.0f, 1.0f);//z軸回転 glRotatef(angle[1][1], 0.0f, 1.0f, 0.0f);//y軸回転 glRotatef(angle[1][0] + ang, 1.0f, 0.0f, 0.0f);//x軸回転 float ambient[] = { 0.3f, 0.3f, 0.0f, 1.0f}; float diffuse[] = { 0.7f, 0.7f, 0.0f, 1.0f}; float specular[]= { 0.5f, 0.5f, 0.5f, 1.0f}; glMaterialfv(GL_FRONT,GL_AMBIENT,ambient); glMaterialfv(GL_FRONT,GL_DIFFUSE,diffuse); glMaterialfv(GL_FRONT,GL_SPECULAR,specular); glMaterialf(GL_FRONT,GL_SHININESS,100); //モデルビュー変換行列に戻す glMatrixMode(GL_MODELVIEW); glPushMatrix(); glTranslatef(pos[1][0], pos[1][1], pos[1][2]); glRotatef(angle[1][2], 0.0f, 0.0f, 1.0f);//z軸回転 glRotatef(angle[1][1], 0.0f, 1.0f, 0.0f);//y軸回転 glRotatef(angle[1][0] + ang, 1.0f, 0.0f, 0.0f);//x軸回転 drawCylinder(1.0f, 0.7f, 2.0f, 0.3f, 20, 5); glPopMatrix(); } void drawFloor(float widthX, float widthZ, int nx, int nz){ setTextureMatrix(); int i, j; //Floor1枚当たりの幅 float wX = widthX / (float)nx; float wZ = widthZ / (float)nz; float diffuse[][4] = { { 0.9f, 0.9f, 0.9f, 1.0f}, { 0.0f, 0.8f, 0.0f, 1.0f} }; float ambient[] = { 0.2f, 0.2f, 0.2f, 1.0f}; float specular[]= { 0.5f, 0.5f, 0.5f, 1.0f}; glMaterialfv(GL_FRONT,GL_AMBIENT,ambient); glMaterialfv(GL_FRONT,GL_SPECULAR,specular); glMaterialf(GL_FRONT,GL_SHININESS,100); //モデルビュー変換行列に戻す glMatrixMode(GL_MODELVIEW); glNormal3f(0.0f, 1.0f, 0.0f); glPushMatrix(); for (j = 0; j nz; j++) { float z1 = -widthZ / 2.0f + wZ * j; float z2 = z1 + wZ; for (i = 0; i nx; i++) { float x1 = -widthX / 2.0f + wX * i; float x2 = x1 + wX; glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse[(i + j) 1]); glBegin(GL_QUADS); glVertex3f(x1, 0.0f, z1); glVertex3f(x1, 0.0f, z2); glVertex3f(x2, 0.0f, z2); glVertex3f(x2, 0.0f, z1); glEnd(); } } glPopMatrix(); } void resize(int w, int h){ glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(view.fovY, (float)w/(float)h, view.nearZ, view.farZ); width = w; height = h; } void display(void){ //ステップ1:デプスマップの作成 glClear(GL_DEPTH_BUFFER_BIT); glViewport(0, 0, TEX_WIDTH, TEX_HEIGHT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); //光源位置を視点とするモデルビュー変換行列を設定 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluPerspective(fov, (float)TEX_WIDTH / (float)TEX_HEIGHT, 1.0, farZ); gluLookAt(lightPos[0], lightPos[1], lightPos[2], 0.0, 0.0, 0.0, 0.0, 0.0, 1.0); //設定したモデルビュー行列を保存しておく(setTextureMatrixで使用する) glGetFloatv(GL_MODELVIEW_MATRIX, modelview); glColorMask(0, 0, 0, 0); //デプスバッファには背面の奥行きを記録する glCullFace(GL_FRONT); //デプスマップ作成のためにシーンを描画 drawTorus(); drawCylinder(); // デプスバッファの内容をテクスチャメモリに転送 glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 0, 0, TEX_WIDTH, TEX_HEIGHT, 0); //ステップ2 //通常の描画設定に戻す resize(width, height); glColorMask(1, 1, 1, 1); //フレームバッファへ書き込み許可 glCullFace(GL_BACK);//背面は描画しない //カラーバッファのクリア glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity();//視点を変えるときはこの位置に必要 if(cos(view.theta*PAI/180.0) = 0.0)// = 90.0)//カメラ仰角90度でビューアップベクトル切替 gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0); else gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0); //光源設定// l を押した後光源位置可変 glLightfv(GL_LIGHT0, GL_POSITION, lightPos); glsl.ON(); GLint texLoc = glGetUniformLocation(glsl.ShaderProg, shadowMap ); glUniform1i(texLoc, 0); drawTorus(); drawCylinder(); drawFloor(10.0, 10.0, 10, 10); glsl.OFF(); glutSwapBuffers(); } void setLight(){ float lightAmbient0[] = {0.5, 0.5, 0.5, 1.0}; //環境光 float lightDiffuse0[] = {1.0, 1.0, 1.0, 1.0}; //拡散光 float lightSpecular0[] = {1.0, 1.0, 1.0, 1.0};//鏡面光 glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient0); glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse0); glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpecular0); glLightfv(GL_LIGHT0, GL_POSITION, lightPos); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); } void setCamera(){ float pp = PAI / 180.0f; view.pos[2] = view.cnt[2] + view.dist * cos(pp * view.theta) * cos(pp * view.phi);//z view.pos[0] = view.cnt[0] + view.dist * cos(pp * view.theta) * sin(pp * view.phi);//x view.pos[1] = view.cnt[1] + view.dist * sin(pp * view.theta);//y resize(width, height); } void mouse(int button, int state, int x, int y){ float pp = PAI / 180.0f; if(button == GLUT_LEFT_BUTTON state == GLUT_DOWN){ xStart = x; yStart = y; flagMouse = true; }else if(button == GLUT_RIGHT_BUTTON state == GLUT_DOWN){ if(x width/4 x 3*width/4 y height/4 y 3*height/4){ }else if(( x width/4 || x 3*width/4) (y height/4 y 3*height/4)){ if(x width/4 ) view.phi -= 1.0; else view.phi += 1.0; view.cnt[2] = view.pos[2] - view.dist * cos(pp * view.phi) * cos(pp * view.theta); view.cnt[0] = view.pos[0] - view.dist * sin(pp * view.phi) * cos(pp * view.theta); }else if((x width/4 x 3*width/4) (y height/4 || y 3*height/4)){ if( y height/4){ view.theta += 1.0; }else{ view.theta -= 1.0; } view.cnt[2] = view.pos[2] - view.dist * cos(pp * view.theta) * cos(pp * view.phi); view.cnt[0] = view.pos[0] - view.dist * cos(pp * view.theta) * sin(pp * view.phi); view.cnt[1] = view.pos[1] - view.dist * sin(pp * view.theta); }else if(x width/8 y 7*height/8) view.fovY -= 1.0;//zoom in else if(x 7*width/8 y 7*height/8) view.fovY += 1.0;//zoom out }else flagMouse = false; if(state == GLUT_DOWN) setCamera(); } void motion(int x, int y){ if(!flagMouse) return; if(cos(PAI * view.theta /180.0f) = 0.0f){ view.phi -= 0.5f * (float)(x - xStart) ;//tumble }else{ view.phi += 0.5f * (float)(x - xStart) ;//tumble } view.theta += 0.5f * (float)(y - yStart) ;//crane setCamera(); xStart = x; yStart = y; } void Init(void){ glClearColor(0.5f, 0.5f, 0.7f, 1.0f); setCamera(); setLight(); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_SMOOTH); glEnable(GL_CULL_FACE); setShadowMap(); glsl.InitGLSL( vertex.shader , flagment.shader ); } void idle(void){ glutPostRedisplay(); } void timer(int value) { ang+=0.1f; glutTimerFunc(10 , timer , 0); } void main(int argc, char *argv[]){ glutInitWindowPosition(100, 100); glutInitWindowSize(width, height); glutInit( argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutCreateWindow( シャドウマッピング ); glutDisplayFunc(display); glutIdleFunc(idle); glutMouseFunc(mouse); glutMotionFunc(motion); glutReshapeFunc(resize); glutTimerFunc(10 , timer , 0); Init(); glutMainLoop(); return; }
https://w.atwiki.jp/ce00582/pages/4261.html
class ex44{ int byear,cho,car,stage,age; double z1,z2,z3,z4,z5,z6,z7; double v; double ftutime2[]=new double[200]; double mis[][]=new double[100][51]; double mos[][]=new double[100][51]; double f2by[][]=new double[200][100]; double alpha[]=new double[100]; double beta[]=new double[100]; double gamma[]=new double[100]; double theta[]=new double[100]; double minx[][]=new double[100][100]; double mout[][]=new double[100][100]; void makedata(String file){ ex20 sub19=new ex20(); sub19.makedata(); minx=sub19.mint; ex22 sub21=new ex22(); sub21.makedata(); mout=sub21.mint; ex16 sub16=new ex16(); sub16.makedata(file); f2by=sub16.f2by; data18 d151=new data18(); d151.makedata(); alpha=d151.alpha; beta=d151.beta; gamma=d151.gamma; data152 d152=new data152(); d152.makedata(); theta=d152.ftheta; cho=1900; for(byear=1950; byear 1990; byear++){ cho=1900; for(age=15;age 65;age++){ for(car=0;car 50;car++){ mis[age][car]=0; mos[age][car]=0; } } stage =2008-byear; for(car=1;car 50;car++){ mis[stage][car] = minx[stage][car]; mos[stage][car] = mout[stage][car]; } for(age=stage+1;age 65;age++){ z1= (1 - gamma[age - 1])* f2by[byear-cho][age-1]; z2=f2by[byear-cho][age] - z1; if(z2 0)z2 = 0; z3 =(1 - theta[age]) * z2; z4 = theta[age] * z2; mis[age][1] = z3; z5 = 0; for(car=1;car 50;car++){ z5 = z5 + mos[age-1][car]; } if(z5 == 0)z5 = 1; v=(double)z4/z5; if(v 1)v = 1; for(car=2;car 50;car++){ z6 =(1 - gamma[age - 1]) *mis[age-1][car-1]; mis[age][car]=z6+v * mos[age-1][car-1]; } for(car=1;car 50;car++){ z7=(gamma[age - 1] - alpha[age - 1] - beta[age-1]) * mis[age-1][car]; mos[age][car] = z7+(1 - alpha[age - 1] - v) * mos[age-1][car]; } } z1=0; z2=0; for(car=1;car 25;car++){ z1 = z1 + mis[64][car] + mos[64][car]; z2 = z2 +car*(mis[64][car] + mos[64][car]); } ftutime2[byear-cho] = z2/z1; } } }
https://w.atwiki.jp/ce00582/pages/2721.html
import java.awt.*; import java.awt.event.*; class pro extends Frame { public static void main(String [] args) { Frame f=new pro(); f.setTitle("3D"); f.setSize(700,700); f.setBackground(Color.yellow); f.setVisible(true); } pro(){addWindowListener(new stopwin());} class stopwin extends WindowAdapter{ public void windowClosing(WindowEvent we){System.exit(0);} } public void paint(Graphics g){ double x,y,z; int px,py,pxs,pys; double theta,phi; x=0; y=0; z=500; px=pointx(x,y,z); py=pointy(x,y,z); g.drawLine(100,600,100+px,600-py); x=500; y=0; z=0; px=pointx(x,y,z); py=pointy(x,y,z); g.drawLine(100,600,100+px,600-py); x=0; y=500; z=0; px=pointx(x,y,z); py=pointy(x,y,z); g.drawLine(100,600,100+px,600-py); x=100; y=100; z=100; px=pointx(x,y,z); py=pointy(x,y,z); x=200; y=100; z=100; pxs=pointx(x,y,z); pys=pointy(x,y,z); g.setColor(Color.blue); g.drawLine(100+px,600-py,100+pxs,600-pys); x=100; y=100; z=200; pxs=pointx(x,y,z); pys=pointy(x,y,z); g.setColor(Color.blue); g.drawLine(100+px,600-py,100+pxs,600-pys); x=200; y=100; z=200; px=pointx(x,y,z); py=pointy(x,y,z); g.setColor(Color.blue); g.drawLine(100+pxs,600-pys,100+px,600-py); x=200; y=100; z=100; pxs=pointx(x,y,z); pys=pointy(x,y,z); g.setColor(Color.blue); g.drawLine(100+pxs,600-pys,100+px,600-py); x=200; y=200; z=100; px=pointx(x,y,z); py=pointy(x,y,z); g.setColor(Color.blue); g.drawLine(100+pxs,600-pys,100+px,600-py); x=200; y=200; z=200; pxs=pointx(x,y,z); pys=pointy(x,y,z); g.setColor(Color.blue); g.drawLine(100+pxs,600-pys,100+px,600-py); x=100; y=200; z=200; px=pointx(x,y,z); py=pointy(x,y,z); g.setColor(Color.blue); g.drawLine(100+pxs,600-pys,100+px,600-py); x=100; y=200; z=100; pxs=pointx(x,y,z); pys=pointy(x,y,z); g.setColor(Color.blue); g.drawLine(100+pxs,600-pys,100+px,600-py); x=100; y=200; z=100; pxs=pointx(x,y,z); pys=pointy(x,y,z); g.setColor(Color.blue); g.drawLine(100+pxs,600-pys,100+px,600-py); x=100; y=100; z=100; px=pointx(x,y,z); py=pointy(x,y,z); g.setColor(Color.blue); g.drawLine(100+pxs,600-pys,100+px,600-py); x=100; y=200; z=100; px=pointx(x,y,z); py=pointy(x,y,z); x=200; y=200; z=100; pxs=pointx(x,y,z); pys=pointy(x,y,z); g.setColor(Color.blue); g.drawLine(100+pxs,600-pys,100+px,600-py); x=100; y=100; z=100; px=pointx(x,y,z); py=pointy(x,y,z); x=100; y=200; z=100; pxs=pointx(x,y,z); pys=pointy(x,y,z); g.setColor(Color.blue); g.drawLine(100+pxs,600-pys,100+px,600-py); x=200; y=100; z=200; px=pointx(x,y,z); py=pointy(x,y,z); x=200; y=200; z=200; pxs=pointx(x,y,z); pys=pointy(x,y,z); g.setColor(Color.blue); g.drawLine(100+pxs,600-pys,100+px,600-py); x=100; y=100; z=200; px=pointx(x,y,z); py=pointy(x,y,z); x=100; y=200; z=200; pxs=pointx(x,y,z); pys=pointy(x,y,z); g.setColor(Color.blue); g.drawLine(100+pxs,600-pys,100+px,600-py); } public static int pointy(double x,double y,double z){ int p2; double theta,phi; theta=-0.222222*Math.PI; phi=0.333333*Math.PI; p2=(int)(-Math.cos(theta)*Math.cos(phi)*x-Math.sin(theta)*Math.cos(phi)*y+Math.sin(phi)*z); return p2; } public static int pointx(double x,double y,double z){ int p1; double theta; theta=-0.222222*Math.PI; p1=(int)(-Math.sin(theta)*x+Math.cos(theta)*y); return p1; } }
https://w.atwiki.jp/ce00582/pages/2961.html
import java.awt.*; import java.awt.geom.*; import java.awt.event.*; import javax.swing.*; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import java.io.IOException; import java.io.*; public class pro extends JFrame{ double c[][]=new double[6][6]; double y1[][]=new double[6][6]; double y2[][]=new double[6][6]; int s1,s2; public static void main(String[] args){ pro test = new pro(); test.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){System.exit(0);} }); test.setBounds( 0, 0, 700, 700); test.setVisible(true); } pro(){ try{ BufferedReader br = new BufferedReader(new FileReader("tax.txt")); String str; String x[]=new String[5]; for(int i=0; i 25; i++){ str = br.readLine(); x=str.split(","); s1=Integer.valueOf(x[0]); s2=Integer.valueOf(x[1]); c[s1][s2]=Double.valueOf(x[2]); y1[s1][s2]=Double.valueOf(x[3]); y2[s1][s2]=Double.valueOf(x[4]); } br.close(); } catch(IOException e){System.out.println("入出力エラーです。");} } public void paint(Graphics g){ double x,y,z; int px,py; int px1,px2,py1,py2; Graphics2D g2 = (Graphics2D)g; BufferedImage readImage = null; if (readImage == null){ readImage = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_BGR); } Graphics2D off = readImage.createGraphics(); off.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); BasicStroke wideStroke = new BasicStroke(2.0f); off.setStroke(wideStroke); off.setPaint(Color.white); off.fillRect(0,0,700,700); off.setPaint(Color.red); x=0; y=0; z=500; px=pointx(x,y,z); py=pointy(x,y,z); off.drawLine(100,600,100+px,600-py); x=500; y=0; z=0; px=pointx(x,y,z); py=pointy(x,y,z); off.drawLine(100,600,100+px,600-py); x=0; y=500; z=0; px=pointx(x,y,z); py=pointy(x,y,z); off.drawLine(100,600,100+px,600-py); off.setColor(Color.blue); for (s2=1;s2 6;s2++){ for (s1=1;s1 5;s1++){ x=50*s1; y=25*s2; z=1000*y1[s1][s2]; px1=pointx(x,y,z); py1=pointy(x,y,z); x=50*(s1+1); y=25*s2; z=1000*y1[s1+1][s2]; px2=pointx(x,y,z); py2=pointy(x,y,z); off.drawLine(100+px1,600-py1,100+px2,600-py2); } } for (s1=1;s1 6;s1++){ for (s2=1;s2 5;s2++){ x=50*s1; y=25*s2; z=1000*y1[s1][s2]; px1=pointx(x,y,z); py1=pointy(x,y,z); x=50*s1; y=25*(s2+1); z=1000*y1[s1][s2+1]; px2=pointx(x,y,z); py2=pointy(x,y,z); off.drawLine(100+px1,600-py1,100+px2,600-py2); } } x=0; y=0; z=400; px=pointx(x,y,z); py=pointy(x,y,z); off.drawString("夫の所得",px+100,600-py); x=200; y=0; z=0; px=pointx(x,y,z); py=pointy(x,y,z); off.drawString("夫の能力",px+100,600-py); x=0; y=400; z=0; px=pointx(x,y,z); py=pointy(x,y,z); off.drawString("妻の能力",px+100,600-py); if (readImage != null){g2.drawImage(readImage,0,0, this);} try { boolean result = ImageIO.write(readImage, "jpg", new File("sam.jpg")); } catch (Exception e) { e.printStackTrace(); } } public static int pointy(double x,double y,double z){ int p2; double theta,phi; theta=-0.222222*Math.PI; phi=0.333333*Math.PI; p2=(int)(-Math.cos(theta)*Math.cos(phi)*x-Math.sin(theta)*Math.cos(phi)*y+Math.sin(phi)*z); return p2; } public static int pointx(double x,double y,double z){ int p1; double theta; theta=-0.222222*Math.PI; p1=(int)(-Math.sin(theta)*x+Math.cos(theta)*y); return p1; } }